// pages/index/index.js
Page({
  data: {
    searchQuery: '',          // 用户输入的搜索关键词
    results: [],              // 搜索结果数组
    hotProducts: [],          // 热门商品数组（平铺）
    categorizedHotProducts: [], // 按分类组织的热门商品
    currentPage: 1,           // 当前分页页码
    pageSize: 10,             // 每页加载的商品数量
    isLoading: false,         // 是否正在加载数据的标志
    hasMore: true             // 是否还有更多数据可加载
  },
  
  // 页面加载时触发的生命周期函数
  onLoad: function() {
    this.fetchHotProducts(); // 调用获取热门商品的方法
  },
  
  // 获取热门商品的方法
  fetchHotProducts: function() {
    // 如果当前正在加载数据或没有更多数据，则不执行后续操作
    if (this.data.isLoading || !this.data.hasMore) return;
    
    // 设置加载状态为 true，表示正在加载数据
    this.setData({
      isLoading: true
    });
    
    // 访问云数据库中的 'products' 集合
    wx.cloud.database().collection('products')
      .where({
        isHot: true // 过滤条件：只获取 isHot 为 true 的商品
      })
      .orderBy('sales', 'desc') // 按照销售量 'sales' 字段降序排序
      .skip((this.data.currentPage - 1) * this.data.pageSize) // 跳过已加载的页数，实现分页
      .limit(this.data.pageSize) // 限制每次查询的商品数量
      .get({
        // 查询成功的回调函数
        success: res => {
          const newProducts = res.data; // 获取新加载的商品数据
          const updatedHotProducts = this.data.hotProducts.concat(newProducts);
          
          // 按分类组织商品
          const categorized = this.groupByCategory(updatedHotProducts);
          
          this.setData({
            hotProducts: updatedHotProducts, // 更新平铺的热门商品列表
            categorizedHotProducts: categorized, // 更新分类后的热门商品列表
            currentPage: this.data.currentPage + 1, // 更新当前页码，准备加载下一页
            hasMore: newProducts.length === this.data.pageSize // 判断是否还有更多数据可加载
          });
        },
        // 查询失败的回调函数
        fail: err => {
          wx.showToast({
            title: '获取热门商品失败', // 显示失败提示
            icon: 'none'
          });
          console.error('获取热门商品失败', err); // 在控制台输出错误信息
        },
        // 无论成功还是失败，查询完成后都会执行的回调函数
        complete: () => {
          this.setData({
            isLoading: false // 取消加载状态
          });
        }
      });
  },
  
  // 按分类组织商品的辅助函数
  groupByCategory: function(products) {
    const categoriesMap = {};
    products.forEach(product => {
      const category = product.category || '未分类'; // 确保有分类名称
      if (!categoriesMap[category]) {
        categoriesMap[category] = [];
      }
      categoriesMap[category].push(product);
    });
    
    // 将映射转换为数组，方便在 WXML 中循环
    const categorizedArray = [];
    for (const category in categoriesMap) {
      categorizedArray.push({
        categoryName: category,
        products: categoriesMap[category]
      });
    }
    
    return categorizedArray;
  },
  
  // 用户上拉页面底部时触发的事件处理函数
  onReachBottom: function() {
    this.fetchHotProducts(); // 调用获取更多热门商品的方法
  },
  
  // 用户在搜索输入框中输入内容时触发的事件处理函数
  onSearchInput: function(e) {
    this.setData({
      searchQuery: e.detail.value // 更新搜索关键词为用户输入的值
    });
  },
  
  // 用户点击搜索按钮时触发的事件处理函数
  onSearch: function() {
    const query = this.data.searchQuery.trim(); // 获取并去除搜索关键词的前后空白
    if (query === '') { // 如果搜索关键词为空
      wx.showToast({
        title: '请输入搜索内容', // 提示用户输入搜索内容
        icon: 'none'
      });
      return; // 终止搜索操作
    }

    // 跳转到搜索页面，并将搜索关键词作为参数传递
    wx.navigateTo({
      url: `/pages/search/search?keyword=${encodeURIComponent(query)}` // 使用 encodeURIComponent 处理关键词中的特殊字符
    });
  },
  
  // 用户点击商品项时触发的事件处理函数，用于跳转到商品详情页
  viewProduct: function(e) {
    const id = e.currentTarget.dataset.id; // 获取被点击商品的 _id
    wx.navigateTo({
      url: `/pages/productDetail/productDetail?id=${id}` // 跳转到商品详情页，并传递商品的 _id 作为参数
    });
  }
});
